package br.com.cast.exercicio5;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class ClientesDAO {

	private Connection conexao;

	public ClientesDAO() {
		ConnectionFactory connectionFactory = new ConnectionFactory();
		conexao = connectionFactory.getConnection();
	}

	public void salvar(Clientes c) throws SQLException {

		PreparedStatement pst = null;
		try {
			pst = conexao
					.prepareStatement("insert into clientes(nome,data_Nascimento,data_cadastro) values(?,?,?)");

			Date dataConvertida = new Date(c.getDataCadastro()
					.getTimeInMillis());
//			Date dataConvertida2 = new Date(c.getDataNascimento().set(1985, 12, 20));
			
			Date dataConvertida2 = new Date(c.getDataCadastro()
					.getTimeInMillis());
			

			pst.setString(1, c.getNome());
			pst.setDate(2, dataConvertida);
			pst.setDate(3,dataConvertida2);

			pst.execute();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			pst.close();
		}

	}


	public List<Clientes> buscarTodos() throws SQLException {
		List<Clientes> listaCliente = new ArrayList<Clientes>();
		PreparedStatement pstBusca = null;

		try {
			pstBusca = conexao.prepareStatement("select * from clientes");
			pstBusca.execute();

			ResultSet rs = pstBusca.getResultSet();

			while (rs.next()) {

				Calendar dataConvertida = Calendar.getInstance();
				dataConvertida.setTimeInMillis(rs.getDate("data_nascimento")
						.getTime());
				Calendar dataConvertida2 = Calendar.getInstance();
				dataConvertida2.setTimeInMillis(rs.getDate("data_cadastro")
						.getTime());

				Clientes c = new Clientes();
				c.setId(rs.getInt("id"));
				c.setNome(rs.getString("nome"));
				c.setDataNascimento(dataConvertida);
				c.setDataCadastro(dataConvertida2);

				listaCliente.add(c);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			pstBusca.close();
		}

		return listaCliente;
	}

	public Clientes buscarPorId(int id) throws SQLException {

		Clientes contatoRetorno = null;

		PreparedStatement pst = null;

		try {
			pst = conexao
					.prepareStatement("select * from clientes where id = ? ");

			pst.setInt(1, id);
			pst.execute();
			ResultSet rs = pst.getResultSet();

			if (rs.next()) {

				Calendar dataConvertida = Calendar.getInstance();
				dataConvertida.setTimeInMillis(rs.getDate("data_nascimento")
						.getTime());

				Calendar dataConvertida2 = Calendar.getInstance();
				dataConvertida.setTimeInMillis(rs.getDate("data_cadastro")
						.getTime());

				contatoRetorno = new Clientes();
				contatoRetorno.setId(id);
				contatoRetorno.setNome(rs.getString("nome"));
				contatoRetorno.setDataNascimento(dataConvertida);
				contatoRetorno.setDataCadastro(dataConvertida2);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			pst.close();
		}

		return contatoRetorno;
	}

	public void alteraDados(int id, String dado) throws SQLException {

		PreparedStatement pst = null;

		StringBuilder sql = new StringBuilder();
		sql.append("update clientes ").append("set nome = ?")
				.append("where id =" + id);

		try {

			pst = conexao.prepareStatement(sql.toString());

			pst.setString(1, dado);
			pst.execute();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			pst.close();
		}
	}

	public void excluirPorId(int id) throws SQLException {

		PreparedStatement pst = null;

		try {
			pst = conexao
					.prepareStatement("delete from clientes where id = ? ");

			pst.setInt(1, id);
			pst.execute();
			System.out.println("Deletado");

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			pst.close();
		}

	}

}
